
經過昨天的學習,我們已經對 JSX 的使用和規則有基本的認識。
透過 JSX 能夠建立元素(element),
並將多個元素組合在一起,就能創建出「元件」(Component)。
在開發中,當我們發現某些功能或區塊常重複使用時,
可以將它們模組化,變成獨立且可重用的 React 元件,
提高開發效率,也讓程式碼更容易維護。
使用 function 建立的元件,也稱為 Function Component。
我們會使用 JSX 的語法來建立元件(component),如下方範例:
function MyButton() {
  return <button>Click Me</button>;
}
在這範例中,MyButton 是我們自製的元件,名稱以大寫字母開頭,這讓 JSX 能夠正確識別並渲染。
在使用 JSX 建立元件時,有一個關鍵的規則:
元件的名稱必須以大寫字母開頭,並且名稱應與函式相同。
這樣 JSX 才能識別這是你自製的元件,而不是內建的 HTML 標籤。
當我們要使用自製元件MyButton 時,可以這樣做
//函式名稱為大寫字母
function MyButton() {
  return <button>Click Me</button>;
}
function App() {
  return (
    <div>
	    <MyButton/>  
	    <button>Click Me Again</button>
    <div/>
  );
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
  <App/>
  </React.StrictMode>
);
渲染後的頁面會顯示兩個按鈕,一個是自製元件 <MyButton />,另一個是普通的 <button> 元素。

<div> </div> 標籤,它也可以縮寫為 <>  </>   ,若把做外層的 <div> </div> 標籤移除,在此範例中會顯示為 
 <MyButton/>  
 <button>Click Me Again</button>
會是返回兩個JSX元素,就馬上會報出錯誤!
如果把所有頁面的元件都集中寫在 app.js 檔案裡頭,
隨著日後的開發,肯定會越來越龐大,
這時在管理與維護上光看到成千上萬的程式碼堆積在那邊,
心裡都涼一半了!
還要找問題在哪邊,可能頭很大!
因此,需要將程式碼拆分出來各別處理。
來做一個卡片的元件
在 src/ 下 ,新增一個conponent資料夾,
專案架構會比較明確,看到資料夾名稱就知道用途。
在此資料夾中新增 Card.js 檔案
function Card() {
  return (
    <div className="card">
      <h2 className="card-title">Card Title 1</h2>
      <p className="card-content">This is the content of the first card.</p>
      <button className="card-button">Click Me</button>
    </div>
  )
}
export default Card
接著到App.css 新增卡片的樣式
.card {
  width:100%;
  max-width:400px;
  border: 1px solid #ccc;
  border-radius: 8px;
  padding: 16px;
  margin: 16px;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
  text-align:center;
}
.card-title {
  font-size: 1.5em;
  margin-bottom: 8px;
}
.card-content {
  font-size: 1em;
  margin-bottom: 16px;
}
.card-button {
  padding: 8px 16px;
  background-color: #007bff;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}
最後,我們要引入 Card元件,來到 App.js
import './App.css';
import Card from './component/Card';
function App() {
  return (
    <>
	    <Card />
    </>
  );
}
export default App;
就可以看到畫面是
如果要有兩個一樣的卡片,我們就可以在新增
import './App.css';
import Card from './component/Card';
function App() {
  return (
    <>
    <Card />
    <Card />
    </>
  );
}
export default App;
但發現這些卡片的內容都是固定寫死的,好像用起來不好用欸!!!
這時候我們就要學到 props 資料傳遞的功能,這些內容我們明天來說明。
來複習一下今天所學到的內容重點吧:
Function Component的規則
<div> </div> 標籤,它也可以縮寫為 <>  </>
Function Component帶來的好處
本文將會同步更新到我的部落格,歡迎大家來blog參觀~